#ifndef	_J_SINKRONIZACIJA_H_
#define	_J_SINKRONIZACIJA_H_

#include "dretve.h"

//javno  >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

//dodatne zastavice kod "cekaj" operacija
#define DRUGAOP	1
#define	PROBAJ	2

//citac/pisac zaljucavanje
#define	CITAC	4
#define PISAC	8
#define	NITKO	0

//sucelje
void j_inicijaliziraj_sinkronizaciju ();
int j_dohvati_sinkro (void *param);
int j_obrisi_sinkro (void *param);
int j_propusti_sinkro (void *param);
int j_cekaj_sinkro (void *param);

#ifdef _J_SINKRONIZACIJA_C_

typedef struct _jsinkro_t_ {
	uint brojac;	//vrijednost semaforma/monitora
	int brojac2;	//brojac rekurzije ili sto vec treba
	int id_dr;	//id dretve koje "ima" semafor/monitor
	int red2;	//id dodatno potrebnog reda (opcionalno se koristi)
} j_sinkro_t;

//interne pomocne funkcije
int j_propusti_sinkro_i (int id_reda, bool sve);
int j_provjeri_sinkro(int id_reda);

#endif	/* _J_SINKRONIZACIJA_C_ */
#endif	/* _J_SINKRONIZACIJA_H_ */

